<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('insurance_types', function (Blueprint $table) {
            $table->id();
            $table->timestamps();

            // 保险类型基本信息
            $table->string('code', 50)->unique(); // 保险类型编码
            $table->string('name', 100); // 保险类型名称
            $table->string('category', 50); // social_insurance, commercial_insurance, supplemental
            $table->text('description')->nullable();

            // 缴费规则
            $table->string('contribution_type', 20)->default('percentage'); // percentage, fixed_amount
            $table->decimal('employee_rate', 5, 4)->nullable(); // 个人缴费比例
            $table->decimal('company_rate', 5, 4)->nullable(); // 单位缴费比例
            $table->decimal('max_base_amount', 10, 2)->nullable(); // 最高缴费基数
            $table->decimal('min_base_amount', 10, 2)->nullable(); // 最低缴费基数

            // 保险特性
            $table->boolean('is_mandatory')->default(false); // 是否强制保险
            $table->boolean('is_tax_deductible')->default(true); // 是否可税前扣除
            $table->boolean('requires_medical_exam')->default(false); // 是否需要体检
            $table->integer('waiting_period_days')->default(0); // 等待期（天）

            // 适用范围
            $table->json('applicable_positions')->nullable(); // 适用的岗位
            $table->json('applicable_departments')->nullable(); // 适用的部门
            $table->integer('min_service_years')->default(0); // 最低服务年限
            $table->integer('max_age')->nullable(); // 最高年龄限制

            // 保险期间
            $table->string('insurance_period', 50)->nullable(); // 保险期间：1_year, 5_years, lifetime, etc.
            $table->boolean('auto_renewal')->default(true); // 是否自动续保
            $table->integer('renewal_notice_days')->default(30); // 续保提醒天数

            // 理赔信息
            $table->text('coverage_details')->nullable(); // 保障范围详情
            $table->text('exclusions')->nullable(); // 除外责任
            $table->decimal('max_coverage_amount', 12, 2)->nullable(); // 最高保障金额

            // 状态管理
            $table->string('status', 20)->default('active'); // active, inactive, deprecated
            $table->date('effective_date');
            $table->date('expiration_date')->nullable();

            // 配置选项
            $table->json('additional_config')->nullable(); // 额外配置

            // 创建者信息
            $table->string('created_by', 100)->nullable();
            $table->string('updated_by', 100)->nullable();

            // 索引
            $table->index(['category', 'status']);
            $table->index(['is_mandatory']);
            $table->index(['status']);
            $table->index(['effective_date', 'expiration_date']);
            $table->index(['code']);
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::dropIfExists('insurance_types');
    }
};
